/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package presentacion;

import hibernate.objeto.AnalisisCargaEstudioLaboratorio;
import hibernate.objeto.AntecedenteHabitacional;
import hibernate.objeto.AntecedenteHabito;
import hibernate.objeto.AntecedenteOcupacional;
import hibernate.objeto.DiagnosticoYTriageInternacion;
import hibernate.objeto.EnfermedadYDiagnosticoAmbulatorio;
import hibernate.objeto.Evolucion;
import hibernate.objeto.PeriodoAplicacionVacuna;
import hibernate.objeto.Persona;
import hibernate.objeto.Provincia;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.Vector;
import javax.help.HelpBroker;
import javax.help.HelpSet;
import javax.help.HelpSetException;
import javax.swing.ComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import logica.AnalisisCargaEstudioLaboratorioLogica;
import logica.AntecedenteHabitacionalLogica;
import logica.AntecedenteHabitoLogica;
import logica.AntecedenteOcupacionalLogica;
import logica.CapaLogica;
import logica.LocalidadLogica;
import logica.PeriodoAplicacionVacunaLogica;
import logica.ProvinciaLogica;
import logica.TipoCargaEstudioLaboratorioLogica;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.MensajePresentacion;

/**
 *
 * @author
 */
public class CapaPresentacion {
    
    public static boolean modoCarga = false;
    public static boolean modoModificacion = false;
    public static boolean modoVisualizacion = false;
    public static HelpSet helpset = null;
    public static HelpBroker hb = null;
    private static ClassLoader cl = CapaPresentacion.class.getClassLoader();

    public static String IMPRESION_CONSEJO = "Ingrese la cabecera y el pie de página, "
            + "por defecto se muestra el apellido y nombre del paciente"
            + " y su número de historia clínica. Utilice {0} para cada "
            + " página muestre el número correspondiente.";
    
    public static void resetearVariablesModalidad() {
        modoCarga = false;
        modoModificacion = false;
        modoVisualizacion = false;
    }
    
    public static boolean modalidadSeteada() {
        return (modoCarga || modoModificacion || modoVisualizacion);
    }

    /**
     * En caso de tratarse de una madificación debe verificarse que realmente
     * se quiera modificar.
     *
     * @param objetoAModificar El objeto que se desea modificar
     * @param msg La preposicion del objeto
     * @return true si se debe modificar, false en caso contrario
     */
    public static boolean confirmarModificacion(String objetoAModificar, String msg) {
        boolean retorno = false;
        if (modoModificacion) {
            //Confirmar modificación
            int confirmado = MensajePresentacion.confimarModificacionObjeto(
                    objetoAModificar, msg);
            if (JOptionPane.OK_OPTION == confirmado) {
                retorno = true;
            } else {
                retorno = false;
            }
        } else {
            retorno = true;
        }

        return retorno;
    }

    public static void setearLabelEstado(Object entidad, JLabel jLabel) {
        String estado = "";

        if (entidad instanceof EnfermedadYDiagnosticoAmbulatorio) {
            estado = ((EnfermedadYDiagnosticoAmbulatorio) entidad).
                    getEstadoEnfermedadYDiagnosticoAmbulatorio().toUpperCase();

        } else if (entidad instanceof DiagnosticoYTriageInternacion) {
            estado = ((DiagnosticoYTriageInternacion) entidad).
                    getEstadoDiagnosticoYTriageInternacion().toUpperCase();

        } else if (entidad instanceof Evolucion) {
            if (((Evolucion) entidad).getEnfermedadYDiagnosticoAmbulatorio() != null) {
                estado = ((Evolucion) entidad).getEnfermedadYDiagnosticoAmbulatorio().
                        getEstadoEnfermedadYDiagnosticoAmbulatorio().toUpperCase();
            } else if (((Evolucion) entidad).getDiagnosticoYTriageInternacion() != null) {
                estado = ((Evolucion) entidad).getDiagnosticoYTriageInternacion().
                        getEstadoDiagnosticoYTriageInternacion().toUpperCase();
            }
        }

        jLabel.setText("ESTADO: " + estado);
        if (jLabel.getText().equalsIgnoreCase("ESTADO: ACTIVA")) {
            jLabel.setForeground(Fuente.COLOR_OK);
        } else if (jLabel.getText().equalsIgnoreCase("ESTADO: NO ACTIVA")) {
            jLabel.setForeground(Fuente.COLOR_ERROR);
        }
    }

    /**
     * Abre un archivo con su respectiva aplicación
     *
     * @param id El id del objeto creado
     * @param nombreArchivo El nombre del archivo
     * @param archivoBD El archivo a abrir
     * @param abrir true si se desea abrir el archivo creado, false en caso contrario
     * @return La ruta en donde se creó la fotografía temporal
     */
    public static String abrirArchivo(int id, String nombreArchivo, byte[] archivoBD,
            boolean abrir) {
        String path = null;
        try {
            Desktop dtop = Desktop.getDesktop();
            String rutaTemporal =
                    CapaLogica.DIRECTORIO_DE_TRABAJO + "\\" + id + "_" + nombreArchivo;

            //Primero verifica q no este creado aún para abrirlo localmente
            File file = new File(rutaTemporal);
            
            if (file.exists() && abrir) {
                dtop.open(file);
                path = file.getAbsolutePath();
            } else {
                file = CapaLogica.byteArrayToFile(rutaTemporal, archivoBD);
                if (file != null && abrir) {
                    dtop.open(file);
                } else if (file != null) {
                    path = file.getAbsolutePath();
                }
            }
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
            JOptionPane.showMessageDialog(null,
                    "No se puede abrir el archivo!!!",
                    "Información", JOptionPane.INFORMATION_MESSAGE);
        }

        return path;
    }

    /**
     * En caso de que se esté visualizando setea los respectivos botones.
     *
     */
    public static void personalizarBotonesEnVisualizacion(
            JButton aceptar, JButton cancelar) {
        
        if (aceptar != null) {
        aceptar.setVisible(false);
        }
        cancelar.setText("Volver");
        cancelar.setMnemonic('v');
    }

    /**
     * En caso de que se esté visualizando setea los respectivos botones.
     *
     */
    public static void personalizarBotonesEnVisualizacion(JLabel label,
            JButton aceptar, JButton cancelar) {
        label.setText("Propiedades");

        if (aceptar != null) {
            aceptar.setVisible(false);
        }
        cancelar.setText("Volver");
        cancelar.setMnemonic('v');
    }

    /**
     * En caso de que se quieran restarurar  los botones aceptar y cancelar, se
     * vuelven a setear dichos botones.
     *
     */
    public static void personalizarBotonesEnCargaDeDatos(
            JButton aceptar, JButton cancelar) {
        if (aceptar != null) {
            aceptar.setVisible(false);
        }
        cancelar.setText("Cancelar");
        cancelar.setMnemonic('c');
        aceptar.setVisible(true);
    }

    /**
     * En caso de que se quieran desactivar los botones anterior y siguiente, se
     * se procede a desactivarlos.
     *
     */
    public static void personalizarBotonesPaginadorDesactivado(
            JButton botonAnteriorPaginador, JButton botonSiguientePaginador) {
        botonAnteriorPaginador.setEnabled(false);
        botonSiguientePaginador.setEnabled(false);
    }

    /**
     * En caso de que se quieran activar los botones anterior y siguiente, se
     * se procede a activarlos.
     *
     */
    public static void personalizarBotonesPaginadorActivado(
            JButton botonAnteriorPaginador, JButton botonSiguientePaginador) {
        botonAnteriorPaginador.setEnabled(true);
        botonSiguientePaginador.setEnabled(true);
    }


    /**
     * Retorna las dimensiones máximas que puede adoptar la pantalla sin la
     * barra de inicio.
     *
     * @return El objeto Dimension con las respectivas diemensiones
     */
    public static Dimension getTamañoMaximoJDialog(){
        Rectangle maxBounds =
                GraphicsEnvironment.getLocalGraphicsEnvironment().
                getMaximumWindowBounds();

        return new Dimension(((int) maxBounds.getWidth()),
                ((int) maxBounds.getHeight()));
    }

    /**
     * Carga el ComboBox con los tipos de accesos al sistema.
     *
     * @return Un comboBoxModel cargado con los nombres de los tipos de
     * accesos
     */
    public static ComboBoxModel getListaDeTipoDeAcceso() {
        String[] listaTipoDeAcceso = {"", "Médico", "Secretaría",
                                        "Enfermería", "Paciente"};

        return new javax.swing.DefaultComboBoxModel(listaTipoDeAcceso);
    }

    /**
     * Carga el ComboBox con los tipos de documentos.
     *
     * @return Un comboBoxModel cargado con los nombres de los tipos de
     * documentos
     */
    public static ComboBoxModel getListaDeTipoDeDocumento() {
        String[] listaTipoDeDocumento = {"", "LC", "LE", "DNI", 
                                            "Pasaporte u otro"};

        return new javax.swing.DefaultComboBoxModel(listaTipoDeDocumento);
    }

    /**
     * Carga el ComboBox con los estados civiles de las personas de contacto.
     *
     * @return Un comboBoxModel cargado con los nombres de los estados civiles
     */
    public static ComboBoxModel getListaDeEstadoCivil() {
        String[] listaEstadoCivil = {"", "Casado/a", "Divorciado/a",
                                        "Soltero/a", "Viudo/a"};
        
        return new javax.swing.DefaultComboBoxModel(listaEstadoCivil);
    }

    /**
     * Carga el ComboBox con las ocupaciones.
     *
     * @return Un comboBoxModel cargado con los nombres de las ocupaciones
     */
    public static ComboBoxModel getListaDeOcupaciones() {
        String[] listaOcupacion = {"", "Ama/o de casa", "Desempleado/a",
                    "Comerciante", "Empresario/a", "Estudiante", "Jubilado/a",
                    "Niño/a prescolar", "Obrero/a", "Profesional", "Técnico",
                    "Otra ocupación"};
        
        return new javax.swing.DefaultComboBoxModel(listaOcupacion);
    }

    /**
     * Carga el ComboBox con los grupos sanguineos.
     *
     * @return Un comboBoxModel cargado con los tipos de los grupos sanguineos
     */
    public static ComboBoxModel getListaDeGrupoSanguineo() {
        String[] listaGrupoSanguineo = {"", "0", "A", "B", "AB"};

        return new javax.swing.DefaultComboBoxModel(listaGrupoSanguineo);
    }

    /**
     * Carga el ComboBox con los grupos sanguineos.
     *
     * @return Un comboBoxModel cargado con los tipos de los grupos sanguineos
     */
    public static ComboBoxModel getListaDeRh() {
        String[] listaRh = {"", "Positivo", "Negativo"};

        return new javax.swing.DefaultComboBoxModel(listaRh);
    }

    /**
     * Carga el ComboBox con los vínculos de las personas de contacto.
     *
     * @return Un comboBoxModel cargado con los nombres de los vínculos
     */
    public static ComboBoxModel getListaDeVinculoPersonaDeContacto() {
        String[] listaVinculoPersonaDeContacto = {"", "Amigo/a", "Esposo/a",
                    "Hermano/a", "Hijo/a", "Madre/Padre", "Pareja",
                    "Vecino/a", "Otra relación"};
        
        return new javax.swing.DefaultComboBoxModel(
                listaVinculoPersonaDeContacto);
    }

    /**
     * Carga el ComboBox con los parentezcos.
     *
     * @return Un comboBoxModel cargado con los nombres de los parentezcos
     */
    public static ComboBoxModel getListaDeParentezco() {
        String[] listaParentezco = {"", "Abuela materna", "Abuela paterna",
                    "Abuelo materno", "Abuelo paterno", "Hermana", "Hermano",
                    "Hija", "Hijo", "Madre", "Padre", "Tía/o materno",
                    "Tía/o paterno", "Otro familiar"};

        return new javax.swing.DefaultComboBoxModel(listaParentezco);
    }

    /**
     * Carga el ComboBox con las provincias cargadas en la bd.
     *
     * @param listaDeProvincias La lista de provincias
     * @return Un comboBoxModel cargado con los nombres de las provincias
     */
    public static ComboBoxModel getListaDeProvincia(
            Vector<Provincia> listaDeProvincias) {
        return new javax.swing.DefaultComboBoxModel(ProvinciaLogica.
                vectorAArregloStringProvincia(listaDeProvincias));
    }

    /**
     * Carga el ComboBox con las localidades cargadas en la Provincia.
     *
     * @param listaDeProvincias La lista de provincias
     * @param posicionProvincia La provincia seleccionada
     * @return Un comboBoxModel cargado con los nombres de las localidades
     */
    public static ComboBoxModel getListaDeLocalidad(
            Vector<Provincia> listaDeProvincias, int posicionProvincia) {

        if (posicionProvincia + 1 > 1) {
            String[] listaDeLocalidad = {""};

            listaDeLocalidad = LocalidadLogica.
                    getListaDeLocalidadPorProvincia(
                    listaDeProvincias.get(posicionProvincia));

            return new javax.swing.DefaultComboBoxModel(listaDeLocalidad);
        } else {
            return new javax.swing.DefaultComboBoxModel();
        }
    }

    /**
     * Carga el ComboBox con los períodos de aplicación correspondientes
     * a una determinada vacuna.
     *
     * @param listaDeVacunas La lista de vacunas
     * @return Un comboBoxModel cargado con los nombres de los períodos
     * de aplicación
     */
    public static ComboBoxModel getListaDePeriodosDeAplicacion(
            Vector<PeriodoAplicacionVacuna> listaDeVacunas) {
        return new javax.swing.DefaultComboBoxModel(
                PeriodoAplicacionVacunaLogica.
                vectorAArregloStringPeriodosDeAplicacionVacuna(listaDeVacunas));
    }

    /**
     * Carga el ComboBox con los niveles de educación.
     *
     * @return Un comboBoxModel cargado con los niveles de educación
     */
    public static ComboBoxModel getListaDeNivelDeEducacion() {
        String[] listaNivelDeEducacion = {"", "Primario", "Secundario",
                    "Terciario", "Universitario", "Postgrado", "Otro nivel"};

        return new javax.swing.DefaultComboBoxModel(listaNivelDeEducacion);
    }

    /**
     * Carga el ComboBox con los tipos de especialidades.
     *
     * @return Un comboBoxModel cargado con los tipos de especialidades
     */
    public static ComboBoxModel getListaDeEspecialidadesDeUnProfesionalMedico() {
        String[] listaEspecialidadesDeUnProfesionalMedico = {"", "Alergología",
            "Análisis clínicos",
            "Anatomía Patológica",
            "Anestesiología",
            "Angiología y Cirugía Vascular",
            "Aparato Digestivo ",
            "Bioquímica clínica",
            "Cardiología",
            "Cirugía Cardiovascular",
            "Cirugía General y del Aparato Digestivo ",
            "Cirugía Ortopédica y Traumatología ",
            "Cirugía Pediátrica",
            "Cirugía Plástica Reparadora",
            "Cirugía Torácica ",
            "Cirugía Oral y Maxilofacial",
            "Cirugía Vascular",
            "Dermatología médico-quirúrgica y Venereología",
            "Endocrinología y Nutrición ",
            "Estomatología",
            "Farmacología Clínica",
            "Geriatría",
            "Obstetricia y ginecología ",
            "Hematología",
            "Inmunología",
            "Medicina aeronáutica",
            "Medicina de emergencia ",
            "Medicina del Deporte",
            "Medicina Familiar y Comunitaria",
            "Medicina Intensiva ",
            "Medicina Interna",
            "Medicina Nuclear",
            "Medicina Preventiva y Salud Pública ",
            "Mesoterapia",
            "Microbiología y Parasitología",
            "Nefrología",
            "Neumología ",
            "Neurocirugía",
            "Neurofisiología clínica",
            "Neurología ",
            "Oftalmología",
            "Oncología médica ",
            "Oncología radioterápica",
            "Otorrinolaringología",
            "Pediatría",
            "Psiquiatría",
            "Radiofísica",
            "Radiodiagnóstico o Radiología",
            "Rehabilitación ",
            "Reumatología",
            "Urología",
            "Ingrese una especialidad..."};

        return new javax.swing.DefaultComboBoxModel(listaEspecialidadesDeUnProfesionalMedico);
    }

    /**
     * Carga el ComboBox con los origenes de los examenes complementarios.
     *
     * @return Un comboBoxModel cargado con los tipos de origen de los examenes
     * complementarios
     */
    public static ComboBoxModel getListaDeOrigenDeExamenComplementario() {
        String[] listaOrigenDeExamenComplementario = {"",
            "Dentro de la institución", "Fuera de la institución"};

        return new javax.swing.DefaultComboBoxModel(
                listaOrigenDeExamenComplementario);
    }

    /**
     * Carga el ComboBox con las áreas de los examenes complementarios.
     *
     * @return Un comboBoxModel cargado con las áreas de los examenes
     * complementarios
     */
    public static ComboBoxModel getListaDeAreaDeExamenComplementario() {
        String[] listaAreaDeExamenComplementario = {"", "Anatomía Patológica",
            "Cardiología", "Ecografía", "Laboratorio", "Medicina Nuclear", "PET",
            "Radiología Intervensionista", "Resonancia", "Tomografía"};

        return new javax.swing.DefaultComboBoxModel(
                listaAreaDeExamenComplementario);
    }


    /**
     * Carga el ComboBox con los tipos de examenes cardiológicos.
     *
     * @return Un comboBoxModel cargado con los nombres de los estudios de
     * cardiología
     */
    public static ComboBoxModel getListaDeNombreDeEstudioCardiologia() {
        String[] listaNombreDeEstudioCardiologia = {"", "ECG", "Ecocardiograma",
        "Ergometría", "Ecoestress", "Holter", "Holter de Presión",
        "Tilt Test", "Electrofisiológico", "Cinecoronoariografía"};

        return new javax.swing.DefaultComboBoxModel(listaNombreDeEstudioCardiologia);
    }

    /**
     * Carga el ComboBox con los tipos de apremio en un examen de ecoestress
     * de un estudio cardiológico.
     *
     * @return Un comboBoxModel cargado con los tipos de apremio
     */
    public static ComboBoxModel
            getListaDeTipoApremioEcoestressEstudioCardiologia() {
        String[] listaTipoApremioEcoestressEstudioCardiologia =
        {"", "Ejercicio", "Dobutamina",
        "Dipiridamol"};

        return new javax.swing.DefaultComboBoxModel(listaTipoApremioEcoestressEstudioCardiologia);
    }

    /**
     * Carga el ComboBox con los tipos de métodos en un examen de ergonometría
     * de un estudio cardiológico.
     *
     * @return Un comboBoxModel cargado con los tipos de métodos
     */
    public static ComboBoxModel
            getListaDeTipoMetodoErgonometriaEstudioCardiologia() {
        String[] listaTipoMetodoErgonometriaEstudioCardiologia = {"", "Cicloergometro", "Treadmi"};

        return new javax.swing.DefaultComboBoxModel(listaTipoMetodoErgonometriaEstudioCardiologia);
    }

    /**
     * Carga el ComboBox con los tipos de métodos en un examen de tilt test
     * de un estudio cardiológico.
     *
     * @return Un comboBoxModel cargado con los tipos de métodos
     */
    public static ComboBoxModel
            getListaDeTipoMetodoTiltTestEstudioCardiologia() {
        String[] listaTipoMetodoTiltTestEstudioCardiologia =
        {"", "Convencional", "Sensibilizado Nitrito",
         "Sensibilizado Isoproterenol",
         "Sensibilizado Nitrito e Isoproterenol"};

        return new javax.swing.DefaultComboBoxModel(listaTipoMetodoTiltTestEstudioCardiologia);
    }

    /**
     * Carga el ComboBox con los tipos de protocolos en un examen de ergonometría
     * de un estudio cardiológico.
     *
     * @return Un comboBoxModel cargado con los tipos de protocolos
     */
    public static ComboBoxModel
            getListaDeTipoProtocoloErgonometriaEstudioCardiologia() {
        String[] listaTipoProtocoloErgonometriaEstudioCardiologia = {"",
        "Bruce", "Naughton", "Otros"};

        return new javax.swing.DefaultComboBoxModel(listaTipoProtocoloErgonometriaEstudioCardiologia);
    }

    /**
     * Carga el ComboBox con los tipos de sistema de una determinacion en un estudio
     * de laboratorio.
     * @param cargarSistema True si se carga, false para lista vacia
     *
     * @return Un comboBoxModel cargado con los tipos de protocolos
     */
    public static ComboBoxModel
            getListaDeSistemaDeterminacionesEstudioLaboratorio(
            boolean cargarSistema) {
        String[] listaRetorno = null;
        if (cargarSistema) {
        String[] listaTipoProtocoloErgonometriaEstudioCardiologia =
                                                            {"Convencional",
                                                             "S.I"};
        listaRetorno = listaTipoProtocoloErgonometriaEstudioCardiologia;
        } else {
        String[] listaVacia = {""};
        listaRetorno = listaVacia;
        }
        return new javax.swing.DefaultComboBoxModel(
                listaRetorno);
    }

    /**
     * Carga el ComboBox con las unidades de una determinacion en un estudio
     * de laboratorio.
     *
     * @param tipoUnidad El indicador de la unidad a retornar
     * @return Un comboBoxModel cargado con los tipos de protocolos
     */
    public static ComboBoxModel
            getListaDeUnidadesDeterminacionesEstudioLaboratorio(int tipoUnidad) {

        String[] listaUnidadesDeterminacionesEstudioLaboratorio = null;
        String[] listaNumeroUno = {"Porciento"};
        String[] listaNumeroDos = {"Gramo por litro",
                                    "Miligramo por litro",
                                    "Miligramo por decilitro",
                                    "Miligramo por centilitro",
                                    "Miligramo por militro",
                                    "Gramo por decilitro",
                                    "Nanogramo por decilitro",
                                    "Microgramo por decilitro"};
        String[] listaNumeroTres = {"Hora", "Minuto", "Segundo"};
        String[] listaNumeroCuatro = {"Si o No"};
        String[] listaNumeroCinco = {"Sin unidad"};

        if (tipoUnidad == 1) {
            listaUnidadesDeterminacionesEstudioLaboratorio =
                    listaNumeroUno;
        } else if (tipoUnidad == 2) {
            listaUnidadesDeterminacionesEstudioLaboratorio =
                    listaNumeroDos;
        } else if (tipoUnidad == 3) {
            listaUnidadesDeterminacionesEstudioLaboratorio =
                    listaNumeroTres;
        } else if (tipoUnidad == 4) {
            listaUnidadesDeterminacionesEstudioLaboratorio =
                    listaNumeroCuatro;
        } else if (tipoUnidad == 5) {
            listaUnidadesDeterminacionesEstudioLaboratorio =
                    listaNumeroCinco;
        }

        return new javax.swing.DefaultComboBoxModel(
                listaUnidadesDeterminacionesEstudioLaboratorio);
    }

    /**
     * Carga el ComboBox con los tipos de tratamientos y practicas.
     *
     * @return Un comboBoxModel cargado con los tipos de origen de los examenes
     * complementarios
     */
    public static ComboBoxModel getListaDeTipoTratamientoYPractica() {
        String[] listaOrigenDeTratamientoYPractica = {"",
            "Cuidados de internación", "Tratamiento quirúrgico"};

        return new javax.swing.DefaultComboBoxModel(
                listaOrigenDeTratamientoYPractica);
    }

    /**
     * Carga el ComboBox con los tipos  de los cuidados de internacion.
     *
     * @return Un comboBoxModel cargado con los tipos de origen de los examenes
     * complementarios
     */
    public static ComboBoxModel getListaDeTipoDeInternacionTratamientoYPractica() {
        String[] listaOrigenDeTratamientoYPractica = {"",
            "Balance hidroelectrolítico", "Cuidados y mediciones"};

        return new javax.swing.DefaultComboBoxModel(
                listaOrigenDeTratamientoYPractica);
    }

    /**
     * Carga el ComboBox con los tipos  de los cuidados de internacion.
     *
     * @return Un comboBoxModel cargado con los tipos de origen de los examenes
     * complementarios
     */
    public static ComboBoxModel getListaDeTipoDeIngresoEgresoBalanceHidroelectrolitico() {
        String[] listaOrigenDeTratamientoYPractica = {"",
            "Arterial", "SWAN", "Central", "Acceso periférico", "Sonda vesical",
        "Sonda nasogástrica", "Sonda nasoenteral", "Sonda nasoyeyunal"};

        return new javax.swing.DefaultComboBoxModel(
                listaOrigenDeTratamientoYPractica);
    }


    /**
     * Carga el ComboBox con los tipos  de los cuidados de internacion.
     *
     * @return Un comboBoxModel cargado con los tipos de origen de los examenes
     * complementarios
     */
    public static ComboBoxModel getListaDeTipoDeUbicacionEnIngresoEgresoBalanceHidroelectrolitico() {
        String[] listaOrigenDeTratamientoYPractica = {"",
            "Subclavia derecha", "Subclavia izquierda", "Femoral derecha",
            "Femoral izquierda", "Yugular derecha",
        "Yugular izquierda"};

        return new javax.swing.DefaultComboBoxModel(
                listaOrigenDeTratamientoYPractica);
    }

    /**
     * Carga el ComboBox con los tipos  de los cuidados de internacion.
     *
     * @return Un comboBoxModel cargado con los tipos de origen de los examenes
     * complementarios
     */
    public static ComboBoxModel getListaDePupilasCuidadosYMediciones() {
        String[] listaOrigenDeTratamientoYPractica = {"",
            "isoc.", "midr.", "anis.",
            "miot."};

        return new javax.swing.DefaultComboBoxModel(
                listaOrigenDeTratamientoYPractica);
    }

    /**
     * Carga el ComboBox con los tipos  de los cuidados de cuidados y mediciones.
     *
     * @return Un comboBoxModel cargado con los tipos de origen de los examenes
     * complementarios
     */
    public static ComboBoxModel getListaDeCuidadosCuidadosYMediciones() {
        String[] listaOrigenDeTratamientoYPractica = {"",
            "Higiene", "Higiene bucal", "Cuidado ojos",
            "Cuidados piel", "Levantar al sillón", "Cambio de cama",
            "Cambios posturales", "Cuidados TOT", "Comprobar presión TOT",
            "Cuidados SNG", "Lavado gástrico", "Tolerancia dieta",
            "Cuidados sonda vesical", "Lavados vesicales", "Cura vía venosa",
            "Cura vía arterial", "Cura heridas 1, 2 y 3", "Cura traqueostomía",
            "Medidas termorregulación", "Aspiración de secreciones",
            "Fisioterapia respiratoria"};

        return new javax.swing.DefaultComboBoxModel(
                listaOrigenDeTratamientoYPractica);
    }


    /**
     * Carga el ComboBox con los analisis cargadas en la bd.
     *
     * @param listaDeAnalisisCargaEstudioLaboratorio La lista de
     * AnalisisCargaEstudioLaboratorio
     * @return Un comboBoxModel cargado con los nombres de los
     * AnalisisCargaEstudioLaboratorio
     */
    public static ComboBoxModel
            getListaDeAnalisisCargaEstudioLaboratorio(
            Vector<AnalisisCargaEstudioLaboratorio>
            listaDeAnalisisCargaEstudioLaboratorio) {
        return new javax.swing.DefaultComboBoxModel(
                AnalisisCargaEstudioLaboratorioLogica.
                vectorAArregloStringAnalisisCargaEstudioLaboratorio(
                listaDeAnalisisCargaEstudioLaboratorio));
    }

    /**
     * Carga el ComboBox con los tipos cargadas en el Analisis.
     *
     * @param listaDeAnalisisCargaEstudioLaboratorios La lista de provincias
     * @param posicionAnalisisCargaEstudioLaboratorios La provincia seleccionada
     * @return Un comboBoxModel cargado con los nombres de las localidades
     */
    public static ComboBoxModel getListaDeTipoCargaEstudioLaboratorios(
            Vector<AnalisisCargaEstudioLaboratorio>
            listaDeAnalisisCargaEstudioLaboratorios,
            int posicionAnalisisCargaEstudioLaboratorios) {

        if (posicionAnalisisCargaEstudioLaboratorios >= 0) {
            String[] listaDeLocalidad = {""};

            String[] listaDeTiposAnalisisCargaEstudioLaboratorio = {""};

            listaDeTiposAnalisisCargaEstudioLaboratorio = TipoCargaEstudioLaboratorioLogica.
                    getListaDeTipoCargaEstudioLaboratorioPorAnalisisCargaEstudioLaboratorio(
                    listaDeAnalisisCargaEstudioLaboratorios.get(
                    posicionAnalisisCargaEstudioLaboratorios));

            return new javax.swing.DefaultComboBoxModel(listaDeTiposAnalisisCargaEstudioLaboratorio);
        } else {
            return new javax.swing.DefaultComboBoxModel();
        }
    }

    /**
     * Carga el ComboBox con los tipos de Resultado en un examen de tilt test
     * de un estudio cardiológico.
     *
     * @return Un comboBoxModel cargado con los tipos de protocolos
     */
    public static ComboBoxModel
            getListaDeTipoResultadoTiltTestEstudioCardiologia() {
        String[] listaTipoResultadoTiltTestEstudioCardiologia = {"",
        "Normal", "Respuesta cardioinhibidora", "Respuesta vasodepresora",
        "Mixta"};

        return new javax.swing.DefaultComboBoxModel(listaTipoResultadoTiltTestEstudioCardiologia);
    }

    /**
     * Carga el ComboBox con las fechas de los objetos AntecedenteHabito cargados.
     *
     * @param vectorAntecedenteHabito La lista de antecedentes habitos
     * @return Un comboBoxModel cargado con las fechas
     */
    public static ComboBoxModel getListaDeFechaAntecedenteHabito(
            Vector<AntecedenteHabito> vectorAntecedenteHabito) {
        if (vectorAntecedenteHabito != null) {
            String[] listaAntecedenteHabito = {""};

            listaAntecedenteHabito = AntecedenteHabitoLogica.
                    getListaDeFechaAntecedenteHabito(vectorAntecedenteHabito);

            return new javax.swing.DefaultComboBoxModel(listaAntecedenteHabito);
        } else {
            return new javax.swing.DefaultComboBoxModel(new String[] {""});
        }
    }

    /**
     * Carga el ComboBox con las fechas de los objetos AntecedenteHabitacional
     * cargados.
     *
     * @param vectorAntecedenteHabitacional La lista de antecedentes habitacionales
     * @return Un comboBoxModel cargado con las fechas
     */
    public static ComboBoxModel getListaDeFechaAntecedenteHabitacional(
            Vector<AntecedenteHabitacional> vectorAntecedenteHabitacional) {
        if (vectorAntecedenteHabitacional != null) {
            String[] listaAntecedenteHabitacional = {""};

            listaAntecedenteHabitacional = AntecedenteHabitacionalLogica.
                    getListaDeFechaAntecedenteHabitacional(vectorAntecedenteHabitacional);

            return new javax.swing.DefaultComboBoxModel(listaAntecedenteHabitacional);
        } else {
            return new javax.swing.DefaultComboBoxModel(new String[] {""});
        }
    }

    /**
     * Carga el ComboBox con las fechas de los objetos AntecedenteOcupacional
     * cargados.
     *
     * @param vectorAntecedenteOcupacional La lista de antecedentes ocupacionales
     * @return Un comboBoxModel cargado con las fechas
     */
    public static ComboBoxModel getListaDeFechaAntecedenteOcupacional(
            Vector<AntecedenteOcupacional> vectorAntecedenteOcupacional) {
        if (vectorAntecedenteOcupacional != null) {
            String[] listaAntecedenteOcupacional = {""};

            listaAntecedenteOcupacional = AntecedenteOcupacionalLogica.
                    getListaDeFechaAntecedenteOcupacional(vectorAntecedenteOcupacional);

            return new javax.swing.DefaultComboBoxModel(listaAntecedenteOcupacional);
        } else {
            return new javax.swing.DefaultComboBoxModel(new String[] {""});
        }
    }

    /**
     * Carga el ComboBox con una lista vacia.
     *
     * @return Un comboBoxModel cargado
     * complementarios
     */
    public static ComboBoxModel getListaVacia() {
        String[] listaOrigenDeTratamientoYPractica = {""};

        return new javax.swing.DefaultComboBoxModel(
                listaOrigenDeTratamientoYPractica);
    }   
    
    /**
     * Retorna el indice del combo box que contiene la cadena.
     *
     * @param cadena La cadena a buscar
     * @param comboBox El combo box
     * @return El número de índice del comboBox, -1 si no se encuentra
     */
    public static int getIndiceComboBoxPorString(String cadena, JComboBox comboBox) {
        for (int i = 1; i < comboBox.getItemCount(); i++) {
            if (comboBox.getItemAt(i).toString().equalsIgnoreCase(cadena)) {
                return i;
            }
        }

        return -1;
    }
   
    /**
     * Retorna la fecha en formato dd/mm/aaaa.
     *
     * @param fecha La fecha
     * @return La cadena en forma de string
     */
    public static String imprimirFecha(Date fecha) {
        String fechaRetorno = "";

        if (fecha != null) {
            int dia = fecha.getDate();
            int mes = fecha.getMonth() + 1;
            int anio = fecha.getYear() + 1900;

            fechaRetorno = dia + "/" + mes + "/" + anio;
        }

        return fechaRetorno;
    }

    /**Retorna el apellido, nombre
     *
     * @param persona La persona
     * @return La cadena en forma de string
     */
    public static String imprimirApellidoYNombrePersona(Persona persona){
        String apellidoYNombre = "";

        if (persona.getApellidoPersona() != null &&
                persona.getNombrePersona() != null) {
            apellidoYNombre = persona.getApellidoPersona() +", " +
                    persona.getNombrePersona();
        }

        return apellidoYNombre;
    }

    /**
     * Retorna el tipo y número de documento separados por punto.
     *
     * @param persona La persona
     * @return La cadena en forma de string
     */
    public static String imprimirDocumento(Persona persona){
        String documento = "";

        if (persona.getTipoDeDocumentoPersona() != null &&
                !persona.getTipoDeDocumentoPersona().equalsIgnoreCase("Pasaporte u otro")) {
            NumberFormat formatter = new DecimalFormat("##,###,###");
            String numeroDocumentoString = formatter.format(
                    Integer.parseInt(persona.getNumeroDeDocumentoPersona()));

            documento = persona.getTipoDeDocumentoPersona().toUpperCase()
                    + " " + numeroDocumentoString;
        } else if (persona.getTipoDeDocumentoPersona() != null &&
                persona.getTipoDeDocumentoPersona().equalsIgnoreCase("Pasaporte u otro")){
            documento = persona.getTipoDeDocumentoPersona() + " " +
                persona.getNumeroDeDocumentoPersona();
        }

        return documento;
    }

    /**
     * Retorna el valor entero del mes.
     *
     * @param mes El mes en valor String
     * @return El valor entero del mes
     */
    public static int getMesEnIntPorString (String mes) {
        if (mes.equalsIgnoreCase("enero")) {
            return 0;
        } else if (mes.equalsIgnoreCase("febrero")) {
            return 1;
        } else if (mes.equalsIgnoreCase("marzo")) {
            return 2;
        } else if (mes.equalsIgnoreCase("abril")) {
            return 3;
        } else if (mes.equalsIgnoreCase("mayo")) {
            return 4;
        } else if (mes.equalsIgnoreCase("junio")) {
            return 5;
        } else if (mes.equalsIgnoreCase("julio")) {
            return 6;
        } else if (mes.equalsIgnoreCase("agosto")) {
            return 7;
        } else if (mes.equalsIgnoreCase("septiembre")) {
            return 8;
        } else if (mes.equalsIgnoreCase("octubre")) {
            return 9;
        } else if (mes.equalsIgnoreCase("noviembre")) {
            return 10;
        } else if (mes.equalsIgnoreCase("diciembre")) {
            return 11;
        } else {
            return -1;
        }

    }

    /**
     * Retorna el valor String del mes.
     *
     * @param mes El mes en valor int
     * @return El valor String del mes
     */
    public static String getMesEnStringPorInt (int mes) {
        if (mes == 0) {
            return "enero";
        } else if (mes == 1) {
            return "febrero";
        } else if (mes == 2) {
            return "marzo";
        } else if (mes == 3) {
            return "abril";
        } else if (mes == 4) {
            return "mayo";
        } else if (mes == 5) {
            return "junio";
        } else if (mes == 6) {
            return "julio";
        } else if (mes == 7) {
            return "agosto";
        } else if (mes == 8) {
            return "septiembre";
        } else if (mes == 9) {
            return "octubre";
        } else if (mes == 10) {
            return "noviembre";
        } else if (mes == 11) {
            return "diciembre";
        } else {
            return null;
        }
    }

    /**
     * Lanza la ventana de ayuda del sistema. Solo una instancia de la misma
     * puede estar abierta al mismo tiempo.
     */
    public static void lanzarAyuda() {
        //Se recupera el archivo del directorio donde se ecuentra el jar, se normaliza el espacio
        try {
            String fileName = "file:\\\\\\";
            //Se recupera el archivo del directorio donde se ecuentra el jar, se normaliza el espacio
            fileName = fileName + new File(CapaPresentacion.class.
                    getProtectionDomain().getCodeSource().getLocation().getPath()).
                    getParent().replaceAll("%20", " ");

            fileName = fileName + "\\help\\help_set.hs";

            URL hsURL = new URL(fileName);

            // Si no estan creados, se crean el HelpSet y el HelpBroker
            if (helpset == null) {
                if (hsURL.getContent() != null) {
                    helpset = new HelpSet(cl, hsURL);
                    hb = helpset.createHelpBroker();
                    hb.setDisplayed(true);
                }
            } else {
                //Se visualiza la ayuda
                hb.setDisplayed(true);
            }
        } catch (MalformedURLException m) {
            System.err.println(m.getMessage());
        } catch (HelpSetException h) {
            System.err.println(h.getMessage());
        } catch (IOException io) {
            System.err.println(io.getMessage());
            JOptionPane.showMessageDialog(null,
                    "No se puede abrir el archivo de ayuda asociado.\n" +
                    "Contácte a personal de Sistemas.",
                    "Información", JOptionPane.INFORMATION_MESSAGE);
        }
    }
}
